﻿Public Class BarajaDesarrollo
    Inherits Baraja
    Public Enum Desarrollo
        Soldado
        Monopolio
        Abundancia
        Caminos
        Punto
    End Enum

    Private baraja As BarajaDesarrollo = New BarajaDesarrollo()

    Public Function getInstance() As BarajaDesarrollo
        Return CType(baraja, BarajaDesarrollo)
    End Function

    Private Sub creaCarta(ByVal tipo As Desarrollo, ByVal n As Integer, ByVal descripcion As String)
        Dim nombre As String = tipo.ToString.ToLower
        Dim nueva As Carta = New CartaDesarrollo(nombre, tipo, descripcion)
        For i As Integer = 0 To n - 1
            mazo.Add(nueva)
        Next i
        idACarta.Add(nueva.pID, nueva)
        'aqui se agrega la imagen asociada a ese elemento'
    End Sub

    Private Sub New()
        'aqui llamaria al constructor de imagen'
        creaCarta(Desarrollo.Soldado, 14, "El jugador que coloca un soldado tiene que mover el ladrón a la celda que considere oportuna. Puede robar una carta de recurso a cualquier jugador que tenga un poblado o ciudad que tenga cerca de esa celda")
        creaCarta(Desarrollo.Monopolio, 2, "Al jugar esta carta, elije un recurso; los demás jugadores deberán todas las carta de ese recurso que posean.")
        creaCarta(Desarrollo.Abundancia, 2, "Llévate 2 cartas de cualesquiera 2 recursos. Pueden ser los 2 iguales.")
        creaCarta(Desarrollo.Caminos, 2, "Construye 2 caminos, igual que si los hubieses adquirido usando recursos.")
        creaCarta(Desarrollo.Punto, 5, "Esta carta vale 1 punto de Victoria, se usa automáticamente cuando estais apunto de ganar.")
    End Sub

    Public Function cartaParaTipo(ByVal r As Desarrollo) As Carta
        Return getInstance.cartaParaId(r.ToString.ToLower.Substring(0, 1))
    End Function

    Public Function tipoParaCarta(ByVal c As Carta) As Desarrollo
        Return CType(c, CartaDesarrollo).pDesarrollo
    End Function

    Private Class CartaDesarrollo
        Inherits Carta
        Private r As Desarrollo
        Public Sub New(ByVal nombre As String, ByVal r As Desarrollo, ByVal descripcion As String)
            MyBase.new(nombre.Substring(0, 1), r.ToString, descripcion)
            Me.r = r
        End Sub
        Public Property pDesarrollo() As Desarrollo
            Get
                Return r
            End Get
            Set(ByVal value As Desarrollo)
                r = value
            End Set
        End Property
    End Class
End Class
